from django.conf.urls import url, include
from django.contrib import admin
from boards import views
from accounts import views as accounts_views
from django.contrib.auth import views as auth_views

# 定义项目的URL模式列表
urlpatterns = [
    # 主页的URL模式
    url(r'^$', views.BoardListView.as_view(), name='home'),

    # 配置 signup 页面的 URL 映射
    # 这行代码将 URL 的路径 '/signup/' 映射到 accounts_views 中的 signup 视图函数
    # 名称为 'signup'，可以在模板中使用这个名称来引用这个 URL
    url(r'^signup/$', accounts_views.signup, name='signup'),
    # 配置 login 路由
    url(r'^login/$', auth_views.LoginView.as_view(template_name='login.html'), name='login'),
    # 配置 logout 路由
    # 使用正则表达式匹配 URL 路径为 '^logout/$' 时，调用 auth_views 中的 logoutView 视图类
    # 该视图类经过 Django 的 as_view() 方法转换为视图函数
    # URL 路径和视图函数关联，命名为 'logout'，方便在模板和代码中引用
    url(r'^logout/$', auth_views.LogoutView.as_view(), name='logout'),

    # 特定公告板的主题列表页面URL模式
    # 使用正则表达式捕获公告板的主键（pk），并将其作为整数传递给views.board_topics视图
    # url(r'^boards/(?P<pk>\d+)/$', views.TopicListView.as_view(), name='board_topics'),

    # url(r'boards/(?P<pk>\d+)/new/$', views.new_topic, name='new_topic'),

    # 包含boards应用的URL模式
    # 这允许将boards应用的URL模式包含在项目的主要URL模式中，避免了硬编码的URL
    # url('', include('boards.urls')),

    # 密码重置功能的URL配置

    # 提供密码重置表单的视图
    # 使用指定的模板来渲染密码重置页面
    # 参数:
    # - template_name: 渲染密码重置表单所使用的模板
    # - email_template_name: 发送给用户电子邮件的模板
    # - subject_template_name: 电子邮件主题的模板
    url(r'^reset/$',
        auth_views.PasswordResetView.as_view(
            template_name='password_reset.html',
            email_template_name='password_reset_email.html',
            subject_template_name='password_reset_subject.txt'
        ),
        name='password_reset'),

    # 显示密码重置邮件发送成功后的视图
    # 参数:
    # - template_name: 渲染密码重置邮件发送成功后所使用的模板
    url(r'^reset/done/$',
        auth_views.PasswordResetDoneView.as_view(template_name='password_reset_done.html'),
        name='password_reset_done'),

    # 提供验证用户身份并允许用户设置新密码的视图
    # 使用正则表达式捕获用户ID和验证令牌作为参数
    # 参数:
    # - uidb64: 用户ID的base64编码
    # - token: 密码重置令牌
    # - template_name: 渲染用户设置新密码所使用的模板
    url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
        auth_views.PasswordResetConfirmView.as_view(template_name='password_reset_confirm.html'),
        name='password_reset_confirm'),

    # 显示密码重置成功后的视图
    # 参数:
    # - template_name: 渲染密码重置成功后所使用的模板
    url(r'^reset/complete/$',
        auth_views.PasswordResetCompleteView.as_view(template_name='password_reset_complete.html'),
        name='password_reset_complete'),

    url(r'^settings/account/$', accounts_views.UserUpdateView.as_view(), name='my_account'),

    # 配置密码更改的URL模式
    url(r'^settings/password/$', auth_views.PasswordChangeView.as_view(template_name='password_change.html'),
        name='password_change'),
    # 配置密码更改完成的URL模式
    url(r'^settings/password/done/$', auth_views.PasswordChangeDoneView.as_view(template_name='password_change_done.html'),
        name='password_change_done'),

    url(r'^boards/(?P<pk>\d+)/$', views.TopicListView.as_view(), name='board_topics'),
    url(r'^boards/(?P<pk>\d+)/new/$', views.new_topic, name='new_topic'),
    url(r'^boards/(?P<pk>\d+)/topics/(?P<topic_pk>\d+)/$', views.PostListView.as_view(), name='topic_posts'),  # 定义 home 视图的 URL 模式
    # 定义 home 视图的 URL 模式
    url(r'^boards/(?P<pk>\d+)/topics/(?P<topic_pk>\d+)/reply/$', views.reply_topic, name='reply_topic'),
    # 定义更新和编辑视图的 URL 模式
    url(r'^boards/(?P<pk>\d+)/topics/(?P<topic_pk>\d+)/posts/(?P<post_pk>\d+)/edit/$', views.PostUpdateView.as_view(), name='edit_post'),
    # Django自带的admin应用的URL模式
    # 定义了访问admin界面的URL，保持了代码的可维护性和扩展性
    url(r'^admin/', admin.site.urls),
]
